package com.example.borui.partpositionproject.partpisition.base;

import android.content.Context;
import android.support.v7.widget.RecyclerView;

import com.example.borui.partpositionproject.partpisition.itemviewtype.ItemViewTypeManager;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by borui on 2017/9/28.
 * 单分区
 */
public abstract class BasePartPosition<T> {

    private Context mContext;

    private T data;

    protected List<Integer> mList;

    /***
     * 这是 分区的类型 就是代表 这个分区是什么类型的分区
     * 和 区域id 还有viewType 都不一样
     */
    private int type;

    /***
     * 分区位置 在分区列表的位置索引
     */
    private int areaPosition;

    private int startCount;

    /*** 分区类型起点 ***/
    private int partStartItemType;

    protected IPartPositionView view;

    private ItemViewTypeManager itemViewTypeManager;

    public BasePartPosition(Context mContext, int type, int position, IPartPositionView view){
        this.mContext = mContext;
        mList = new ArrayList<>();
        this.type = type;
        this.view = view;
        this.areaPosition = position;
        itemViewTypeManager = ItemViewTypeManager.getInstance();
    }

    /***
     * 这个方法 只能在构造方法中使用
     * @return
     */
    public int initItemViewType(String type){
        return itemViewTypeManager.initItemViewType(type);
    }

    public abstract RecyclerView.ViewHolder createViewHolder(int viewType);

    public int getItemViewType(int position){
        return 1;
    }

    public T getData() {
        return data;
    }

    /***
     *
     * @param holder
     * @param position 在分区中的位置
     */
    public abstract void onBindViewHolder(RecyclerView.ViewHolder holder,int position);

    /***
     * 在这个方法里面 创建出 mList 给整体adapter 使用
     * @param data
     */
    public void updataBean(T data){
        this.data = data;
        createList();
    }

    protected abstract void createList();

    public List<Integer> getList() {
        return mList;
    }

    /***
     * 这是 分区的类型 就是代表 这个分区是什么类型的分区
     * 和 区域id 还有viewType 都不一样
     */
    public int getProcessorType() {
        return type;
    }

    public Context getContext() {
        return mContext;
    }

    public int getAreaPosition() {
        return areaPosition;
    }

    public int getPartStartItemType() {
        return partStartItemType;
    }

    public void setPartStartItemType(int partStartItemType) {
        this.partStartItemType = partStartItemType;
    }

    /***
     * 这一项 几等分 一共六个位置
     * @param position
     * @return
     */
    public int getSpanCount(int position){
        return IConfig.CLUMS;
    }

    public void setStartCount(int startCount) {
        this.startCount = startCount;
    }

    public int getStartCount() {
        return startCount;
    }

    public void onDestory(){}
}
